package org.example.curriculum_design_6_16.service;

import org.example.curriculum_design_6_16.entity.pojo.SocialService;
import com.baomidou.mybatisplus.extension.service.IService;
import org.example.curriculum_design_6_16.entity.pojo.SocialServiceRule;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * 社会服务Service接口
 * @author 郑凯
 * @description 针对表【social_service】的数据库操作Service
 * @createDate 2025-06-16 09:26:01
 */
public interface SocialServiceService extends IService<SocialService> {
    
    /**
     * 计算单条记录的分数
     * @param record 社会服务记录
     * @param rule8BeforeCount 规则8之前的记录数
     * @return 计算得分
     */
    double calculateSingleRecordScore(SocialService record, int rule8BeforeCount);
    
    /**
     * 计算并更新社会服务分数
     * @param studentId 学生ID
     * @param academicYear 学年
     */
    @Transactional
    void calculateAndUpdateScores(String studentId, String academicYear);
    
    /**
     * 计算基础分（15分减去缺勤扣分）
     * @param studentId 学生ID
     * @param academicYear 学年
     * @return 基础分
     */
    double calculateBaseScore(String studentId, String academicYear);
    
    /**
     * 计算附加分（上限5分）
     * @param studentId 学生ID
     * @param academicYear 学年
     * @return 附加分
     */
    double calculateAdditionalScore(String studentId, String academicYear);
    
    /**
     * 计算社会服务总分（基础分+附加分，上限20分）
     *
     * @param studentId    学生ID
     * @param academicYear 学年
     * @return 总分
     */
    double calculateTotalSocialScore(String studentId, String academicYear);
    
    /**
     * 评定社会服务等级
     * @param totalScore 总分
     * @return 等级（优秀/良好/合格/不合格）
     */
    String evaluateGrade(double totalScore);
    
    /**
     * 获取学生的社会服务等级
     * @param studentId 学生ID
     * @param academicYear 学年
     * @return 等级
     */
    String getStudentGrade(String studentId, String academicYear);
    
    /**
     * 批量计算学生社会服务分数
     * @param studentIds 学生ID列表
     * @param academicYear 学年
     */
    @Transactional
    void batchCalculateScores(List<String> studentIds, String academicYear);
    
    /**
     * 获取学生的社会服务统计信息
     * @param studentId 学生ID
     * @param academicYear 学年
     * @return 统计信息
     */
    Map<String, Object> getStudentStatistics(String studentId, String academicYear);
    
    /**
     * 审核社会服务记录
     * @param recordId 记录ID
     * @param status 审核状态
     * @param comment 审核意见
     */
    @Transactional
    void reviewRecord(Integer recordId, Integer status, String comment);
    
    /**
     * 获取待审核的记录
     * @return 待审核记录列表
     */
    List<SocialService> getPendingRecords();
    
    /**
     * 验证社会服务记录是否符合规则
     * @param record 社会服务记录
     * @return 验证结果
     */
    Map<String, Object> validateRecord(SocialService record);
    
    /**
     * 获取社会服务规则映射
     * @return 规则映射
     */
    Map<String, SocialServiceRule> getRuleMap();

    public int countActivity(String studentId, String academicYear);

    public int insertSocialService(SocialService socialService);
}
